Day 7: OpenAI GPT 시리즈
OpenAI의 GPT 시리즈는 LLM 시대를 연 주역입니다. ChatGPT의 등장으로 일반 대중에게 AI가 알려졌고, API를 통해 개발자들이 가장 많이 사용하는 모델이기도 합니다.
OpenAI 모델 선택 가이드 (2026-04 기준)
| 모델군 | 추천 상황 | 메모 |
|---|---|---|
| GPT-5 계열 | 복잡한 추론, 에이전트형 워크플로 | 정확도 우선, Responses API 권장 |
| GPT-4.1 계열 | 범용 텍스트/코딩, 품질-비용 균형 | 일반 백엔드 API 기본 선택지 |
| GPT-4o / GPT-4o mini | 멀티모달(텍스트+이미지+음성), 저지연 | 실시간/인터랙티브 시나리오에 유리 |
가격과 지원 모델은 자주 바뀌므로 고정 표를 외우기보다 공식 페이지를 항상 먼저 확인하세요.
- API 가격:
https://platform.openai.com/pricing - 모델 문서:
https://developers.openai.com/api/docs/models
Responses API 기본 사용법 (권장)
# pip install openai
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY") # 환경변수 권장
# 기본 텍스트 생성 (Responses API)
response = client.responses.create(
model="gpt-4.1-mini",
input=[
{"role": "system", "content": "당신은 친절한 AI 튜터입니다."},
{"role": "user", "content": "Transformer가 뭔가요? 간단히 설명해주세요."},
],
temperature=0.7, # 창의성 조절 (0=결정적, 2=매우 랜덤)
max_output_tokens=500,
)
print(response.output_text)
print(f"사용 토큰: 입력={response.usage.input_tokens}, "
f"출력={response.usage.output_tokens}")
스트리밍 응답 처리 (Chat Completions 호환 예시)
from openai import OpenAI
client = OpenAI()
# 스트리밍: 토큰이 생성될 때마다 바로 출력
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "Python의 장점 3가지를 알려주세요."},
],
stream=True, # 스트리밍 활성화
)
full_response = ""
for chunk in stream:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)
full_response += content
print(f"\n\n총 응답 길이: {len(full_response)}자")
멀티턴 대화와 시스템 프롬프트 (Chat Completions 호환 예시)
from openai import OpenAI
client = OpenAI()
conversation = [
{"role": "system", "content": "당신은 파이썬 전문가입니다. 코드 예제를 포함하여 답해주세요."},
]
def chat(user_message):
conversation.append({"role": "user", "content": user_message})
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=conversation,
temperature=0.3,
)
assistant_message = response.choices[0].message.content
conversation.append({"role": "assistant", "content": assistant_message})
return assistant_message
# 멀티턴 대화
print(chat("리스트 컴프리헨션이 뭔가요?"))
print("---")
print(chat("그걸 딕셔너리에도 쓸 수 있나요?"))
# 이전 대화 맥락을 기억하고 답변
실무 팁
| 상황 | 추천 모델 | 이유 |
|---|---|---|
| 간단한 분류, 추출 | 경량 모델(예: 4o mini급) | 빠르고 저렴 |
| 복잡한 추론, 분석 | 상위 추론 모델(예: GPT-5/4.1 상위) | 정확도 우선 |
| 프로토타이핑 | 경량 모델 | 비용 절감 |
| 이미지 분석 | 멀티모달 모델 | 이미지 입력 처리 |
| 대량 배치 처리 | 경량 모델 + Batch API | 비용 효율 |
temperature 설정 가이드: 분류/추출은 0, 일반 대화는 0.7, 창작은 1.0~1.5
오늘의 연습문제
- OpenAI API 키를 발급받고, 경량 모델 하나를 골라 “한국의 수도는?”이라는 질문을 보내보세요. 사용된 토큰 수와 예상 비용을 계산하세요.
- 같은 질문을 temperature 0, 0.7, 1.5로 각각 5번씩 보내고 응답의 다양성을 비교해보세요.
- 멀티턴 대화에서 대화가 길어지면 토큰 비용이 어떻게 증가하는지 계산해보세요. 대화가 50턴이 되면 어떤 문제가 생길까요?